package com.itheima.stock.Thread;


/*
继承Thread类：继承Thread类并重写run方法。创建实例后调用start()方法启动线程。这种方式简单，
但是因为Java只支持单继承，如果继承了Thread类，就不能继承其他类。

实现Runnable接口：实现Runnable接口并重写run方法。创建Runnable实例后，将它作为参数传递给
Thread类的构造函数中，然后调用start()方法启动线程。这种方式可以避免单继承的限制，可以同时继承其他类或实现其他接口。

实现Callable接口：实现Callable接口并重写call方法。call方法可以返回一个值，并可以抛出异常。
创建Callable实例后，需要通过ExecutorService的submit方法提交给线程池执行，最后通过Future对象
获取线程执行结果。这种方式可以获取线程执行的返回值和异常信息。
 */
public class MyThread extends Thread {
    /*
        实现多线程的方式一：继承Thread类
        void run()	在线程开启后，此方法将被调用执行
        void start()  使此线程开始执行，Java虚拟机会调用run方法()

        1.定义一个类MyThread继承Thread类
        2.在MyThread类中重写run()方法？
        //run()是用来封装被线程执行的代码//
        3.创建MyThread类的对象
        4.启动线程
         */
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println("我在学习多线程"+i);
        }
    }
}
/*
    1.创建MyThread类的对象
    2.启动线程

    void run()	在线程开启后，此方法将被调用执行
    void start()  使此线程开始执行，Java虚拟机会调用run方法()

    run()方法和start()方法的区别？
    run()：封装线程执行的代码，直接调用，相当于普通方法的调用
    start()：启动线程；然后由JVM调用此线程的run()方法

    void setName(String name)	将此线程的名称更改为等于参数name
    默认名字为Thread-X (x从0开始)
    String getName()	返回此线程的名称
    Thread currentThread()	返回对当前正在执行的线程对象的引用


     */
class MyThreadTest{

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        System.out.println("默认线程名："  + myThread.getName());
        myThread.setName("线程1");
        System.out.println("修改后的线程名："  + myThread.getName());
        Thread thread = Thread.currentThread();
        System.out.println("" +thread.getName());
        myThread.start();
    }
}
